package JZOffer;

/**
 * 剑指 Offer 11. 旋转数组的最小数字
 * 把一个数组最开始的若干个元素搬到数组的末尾，我们称之为数组的旋转。
 * 输入一个递增排序的数组的一个旋转，输出旋转数组的最小元素。
 * 例如，数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转，该数组的最小值为1。
 * **/

class Solution11 {
    //临界点 二分
    public int minArray(int[] numbers) {
        // 3 4 5 1 2 3 3
        //3 4 5 1 2
        int n = numbers.length - 1;
        if (n < 0) return -1;
        while (n > 0 && numbers[n] == numbers[0]) n--;
        //一个递增
        //1 2 3 4 5
        if (numbers[0] <= numbers[n]) return numbers[0];

        //二分
        int l = 0, r = n;
        while (l < r){
            int mid = (l + r) / 2;
            if (numbers[mid] < numbers[0]){
                r = mid;
            }else l =mid + 1;
        }
        return numbers[l];
    }
}